SublimeSocket Rubyの実行とRuntimeなエラーの表示


概要

サンプルとして作ってみた。

Sublime Text でコードを保存すると、shellが走ってRuby実行、

エラーが出ればコード上にエラー行を表示する。




サンプル一式

コードとか一式がSublimeSocket3 のフォルダ内に入っている


hello.rb


log.txt


rubyFilter.txt

保存時のエディタ挙動


各ファイルをみていく。


hello.rb

# show runtime error when save. see ./rubyFilter.txt


pauts "hello world"




実行対象のルッビファイル

いきなりtypoがあり、実行時にはエラーを吐く。



log.txt

実行ログが吐かれるところ。


rubyFilter.txt

// use RuhSushiJSON for running.

// this file is writtern by SushiJSON-lang (https://github.com/sassembla/SushiJSON) 


showAtLog: {

"message": "start defining for ruby."

}->defineFilter: {

"name": "rubyFilter",

"filters": [

{

// error

// e.g.)hello.rb:3: undefined local variable or method `somethingwrong' for main:Object (NameError)

"(.*?):([0-9].*): (.*)\n": {

"injects": {

"groups[0]": "name",

"groups[1]": "line",

"source": "message"

},

"selectors": [

{

"showAtLog<-message": {


}

},

{

"appendRegion<-name, line, message": {

"condition": "keyword"

}

}

]

}

}

]

}->setViewReactor: {

    "react": "on_post_save",

    "reactors": [

    {

    "showAtLog": {

    "message": "saved."

    }

    },

    {

    "eraseAllRegions": {

    

    }

    },

    {

    "runShell": {

    "main": "/bin/sh",

    "": "/Users/highvision/Desktop/rubySample/run.sh"

    }

    }

    ]

}->startTailing: {

"identity": "sample ruby tail",

"path": "/Users/highvision/Desktop/rubySample/log.txt",

"reactors": [

{

"filtering<-source": {

"name": "rubyFilter"

}

}

]

}->showAtLog: {

"message": "ruby setting done."

}


でけえ。。。


保存時にshellの起動、

エラーログにtailハンドラを追加、

エラーをファイル上に表示、


の3つのリアクターを順にセットしている。

赤文字の部分にファイルパスが直書きしてある。




実行

・SublimeSocket3をST3のpackageに入れる

・sample/rubySample フォルダを適当にどこかにコピー

・rubyFilter.txt 内のパスを変更(runShellとstartTailing)

https://github.com/sassembla/SublimeSocket3/blob/master/samples/rubySample/rubyFilter.txt#L48


https://github.com/sassembla/SublimeSocket3/blob/master/samples/rubySample/rubyFilter.txt#L50


https://github.com/sassembla/SublimeSocket3/blob/master/samples/rubySample/rubyFilter.txt#L57



・CommandPalette > "SublimeSocket: run SushiJSON"

スクリーンショット 2014-03-13 12.58.41.png

・画面下のバーに入力窓がでるので、rubyFilter.txtのファイルパスを入れてエンター

どこか/rubyFilter.txt


で、以降、hello.rb の保存時に自動でに実行され、エラーがあると赤く囲んで表示される。

スクリーンショット 2014-03-13 13.01.36.png


動作は全部SublimeSocket3のAPIから実行しているだけなので、

node叩いたりgradle叩いたりも出来ると思う。

勿論ログからエラーだしたり。


以上。